/**
 * 组件库入口文件
 * 自动注册所有组件到系统中
 * 使用自动组件加载器扫描并加载组件，无需手动维护映射
 */
import autoComponentLoader from '@/services/AutoComponentLoader';
import componentManager from '@/services/ComponentManagerService';

// 导出自动组件加载器发现的组件分类信息 - 将在初始化后填充
export let componentCategories = [];

// 导出自动组件加载器发现的组件映射 - 将在初始化后填充
export let componentMap = new Map();

/**
 * 初始化组件库
 * 扫描所有组件并注册到系统
 * @returns {Promise<{componentMap: Map, componentCategories: Array}>}
 */
export const initializeComponentLibrary = async () => {
  try {
    console.log('[ComponentLibrary] 开始初始化组件库...');
    
    // 使用自动组件加载器扫描所有组件
    const result = await autoComponentLoader.initialize();
    
    // 更新导出的变量
    componentMap = result.componentMap;
    componentCategories = result.componentCategories;
    
    // 更新组件管理器的映射
    componentManager.updateComponentMappings({
      componentMap: result.componentMap,
      componentAliases: result.componentAliases,
      componentPaths: result.componentPaths
    });
    
    console.log('[ComponentLibrary] 组件库初始化完成');
    console.log('[ComponentLibrary] 组件总数:', componentMap.size);
    console.log('[ComponentLibrary] 组件类别:', componentCategories.map(c => `${c.title}(${c.components.length})`).join(', '));
    
    return {
      componentMap,
      componentCategories
    };
  } catch (error) {
    console.error('[ComponentLibrary] 初始化组件库失败:', error);
    throw error;
  }
};

/**
 * 动态组件注册
 * 注册所有组件和编辑器到Vue应用
 * @param {object} app Vue应用实例
 */
export const registerComponents = (app) => {
  if (!app) {
    console.error('[ComponentLibrary] 无法注册组件，应用实例为空');
    return;
  }
  
  // 使用自动组件加载器注册组件
  autoComponentLoader.registerComponents(app);
};

export default {
  componentMap,
  componentCategories,
  registerComponents,
  initializeComponentLibrary
} 